<?php
/**
 * @Description jwt组件
 * @Sonkwl Xiong
 * @Date 2022/01/07 13:47:45
 */
class jwt{
    //IHDS加密算法
	/*
	* $rInt操作权值，一般使用(可以自定义)：0:查询，1:新增，2:修改，3:删除，5:跨域验证,7:JWT
	*/
	static public function SetDoIHDS($string,$rInt)
	{
		$hex="";
		for($i=0;$i<strlen($string);$i++)
			$hex.=dechex(ord($string[$i])+$rInt);
		return $hex.$rInt.date("iHds");
	}
	//IHDS解密算法
	static public function GetDoIHDS($hex,$rInt)
	{   
		$t_hex=substr($hex,0,strlen($hex)-strlen($rInt.date("iHds")));
		$string=""; 
		for($i=0;$i<strlen($t_hex)-1;$i+=2)
			$string.=chr(hexdec($t_hex[$i].$t_hex[$i+1])-$rInt);
		return $string;
	}
    /**
     * JWT 版本V2
    */
    //生成jwt
    static public function SetJWT($id,$exp,$keystr){
        $token='{"id":"'.$id.'","exp":"'.$exp.'","md5":"'.md5($keystr.$id.$exp).'"}';
        $hex="";
        $token=self::SetDoIHDS($token,7);
        return $token;
    }
    //验证jwt
    static public function CheckJWT($token,$keystr){
        $tstr=self::GetDoIHDS($token,7);
        $tokenarray=(array)json_decode($tstr,true);
        if(count($tokenarray)!=3 || $tokenarray["exp"]<time() || $tokenarray["md5"]!=md5($keystr.$tokenarray["id"].$tokenarray['exp'])){
            return false;
        }
        return $tokenarray;
    }
    /**
     * JWT 版本V1
    */
    //生成jwt
    static public function SetJWTV1($id,$exp,$keystr,$keyint){
        $token=$id.'-'.$exp.'-'.md5($keystr.$id.$exp);
        $hex="";
        $token=self::SetDoIHDS($token,$keyint);
        return $token;
    }
    //验证jwt
    static public function CheckJWTV1($token,$keystr,$keyint){
        $tstr=self::GetDoIHDS($token,$keyint);
        // echo $tstr;
        $tokenarray=explode('-',$tstr);
        // print_r($tokenarray);
        if(count($tokenarray)!=3 || $tokenarray[1]<time() || $tokenarray[2]!=md5($keystr.$tokenarray[0].$tokenarray[1])){
            return false;
        }
        return $tokenarray;
    }
}
?>